perm filename FITS.FAI[1,BGB]  blob 
sn#101481 filedate 1974-05-10 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE FITS    -  A LEAST SQUARES CUBIC FIT  -  NOVEMBER 1972.
C00004 00003	ACCUMULATE PRODUCTS OF THE COORDINATES OF THE DATA POINTS.
C00006 00004	Solve four equations in four unknowns by Gaussian Elimination.
C00008 00005	Find column-2 pivot for 3 by 3 matriX
C00009 00006	Find column-3 pivot for 2 by 2 matriX
C00010 00007	Back Substitution.
C00011 ENDMK
C⊗;
TITLE FITS    -  A LEAST SQUARES CUBIC FIT  -  NOVEMBER 1972.
COMMENT/
   Y = (((B0*X + B1)*X + B2)*X + B3).
	  SY = B3*N   +  B2*SX +  B1*X2  +  B0*X3.
	  XY = B3*SX  +  B2*X2 +  B1*X3  +  B0*X4.
	 X2Y = B3*X2  +  B2*X3 +  B1*X4  +  B0*X5.
	 X3Y = B3*X3  +  B2*X4 +  B1*X5  +  B0*X6.
/
;COEFFICIENTS OF THE FOUR EQUATIONS.
	ROW1:	BLOCK 6
	ROW2:	BLOCK 6
	ROW3:	BLOCK 6
	ROW4:	BLOCK 6
;Use Accumulators for accumulating.
	ACCUMULATORS{X,Y,SX,SY,X2,XY,X3,X2Y,X4,X3Y,X5,X6}
		I←1
;CUBFIT(A,B,N)
; - halfword array of N points (SX,y) given in A.
; - returns four coefficients in real array B.
SUBR(CUBFIT)
	dac 12,AC12
	lac I,ARG3
	lacn ARG1↔SOS
	hrlm 0,I		;loop count and pointer.
	lac[xwd 4,5]↔setz 4,↔blt 15	;clear accumulators.
;ACCUMULATE PRODUCTS OF THE COORDINATES OF THE DATA POINTS.
L1:	NIP X,(I)	↔	FSC X,233-12
	NAP Y,(I)	↔	FSC Y,233-12
	FADR SX,X
	FADR SY,Y
	FMPR Y,X	↔	FADR XY,Y
	FMPR Y,X	↔	FADR X2Y,Y
	FMPR Y,X	↔	FADR X3Y,Y
	LAC X
	FMPR X↔FADR X2,
	FMPR X↔FADR X3,
	FMPR X↔FADR X4,
	FMPR X↔FADR X5,
	FMPR X↔FADR X6,
L2:	AOBJN I,L1
;SETUP THE COEFFICIENTS.
	LAC 0,ARG1↔AOS↔FSC 0,233
	MOVEI 1,ROW1
	MOVEI 2,ROW2
	DAC  0,(1)1↔DAC SX,(1)2↔DAC X2,(1)3↔DAC X3,(1)4↔DAC SY,(1)5
	DAC SX,(2)1↔DAC X2,(2)2↔DAC X3,(2)3↔DAC X4,(2)4↔DAC XY,(2)5
	MOVEI 3,ROW3
	MOVEI 4,ROW4
	DAC X2,(3)1↔DAC X3,(3)2↔DAC X4,(3)3↔DAC X5,(3)4↔DAC X2Y,(3)5
	DAC X3,(4)1↔DAC X4,(4)2↔DAC X5,(4)3↔DAC X6,(4)4↔DAC X3Y,(4)5
;Solve four equations in four unknowns by Gaussian Elimination.
;TRIANGULARIZATION.
	;Accumulators 1,2,3,4 are row pointers.
	R←5	;Reciprocal of the Pivot.
	M←6	;Multiplier of the row.
	SETZM PARITY#
;Find column-1 pivot for 4 by 4 matrix.
T1:	lacm (1)1↔lacm M,(2)1↔caml M↔jrst .+3↔exch 1,2↔setcmm PARITY
	lacm (1)1↔lacm M,(3)1↔caml M↔jrst .+3↔exch 1,3↔setcmm PARITY
	lacm (1)1↔lacm M,(4)1↔caml M↔jrst .+3↔exch 1,4↔setcmm PARITY
;Reciprocal of the Pivot.
	movsi R,(1.0)↔fdvr R,(1)1
;Zero column-1 elements of rows 2, 3, & 4.
	lac M,(2)1↔fmpr M,R↔	 SETZM (2)1
		lacn M↔fmpr (1)2↔fadrm (2)2
		lacn M↔fmpr (1)3↔fadrm (2)3
		lacn M↔fmpr (1)4↔fadrm (2)4
		lacn M↔fmpr (1)5↔fadrm (2)5
	lac M,(3)1↔fmpr M,R↔	 SETZM (3)1
		lacn M↔fmpr (1)2↔fadrm (3)2
		lacn M↔fmpr (1)3↔fadrm (3)3
		lacn M↔fmpr (1)4↔fadrm (3)4
		lacn M↔fmpr (1)5↔fadrm (3)5
	lac M,(4)1↔fmpr M,R↔	 SETZM (4)1
		lacn M↔fmpr (1)2↔fadrm (4)2
		lacn M↔fmpr (1)3↔fadrm (4)3
		lacn M↔fmpr (1)4↔fadrm (4)4
		lacn M↔fmpr (1)5↔fadrm (4)5
;Normalize First Row.
	FMPRM R,(1)1
	fmprm R,(1)2
	fmprm R,(1)3
	fmprm R,(1)4
	fmprm R,(1)5
;Find column-2 pivot for 3 by 3 matriX
T2:	lacm(2)2↔lacm M,(3)2↔caml M↔jrst .+3↔exch 2,3↔setcmm PARITY
	lacm(2)2↔lacm M,(4)2↔caml M↔jrst .+3↔exch 2,4↔setcmm PARITY
;Reciprocal of the pivot.
	movsi R,(1.0)↔fdvr R,(2)2
;Zero column-2 elements of rows 3 & 4.
	lac M,(3)2↔fmpr M,R	↔SETZM (3)2
		lacn M↔fmpr (2)3↔fadrm (3)3
		lacn M↔fmpr (2)4↔fadrm (3)4
		lacn M↔fmpr (2)5↔fadrm (3)5
	lac M,(4)2↔fmpr M,R	↔SETZM (4)2
		lacn M↔fmpr (2)3↔fadrm (4)3
		lacn M↔fmpr (2)4↔fadrm (4)4
		lacn M↔fmpr (2)5↔fadrm (4)5
;Normalize Second Row.
	FMPRM R,(2)2
	fmprm R,(2)3
	fmprm R,(2)4
	fmprm R,(2)5
;Find column-3 pivot for 2 by 2 matriX
T3:	lacm(3)3↔lacm M,(4)3↔caml M↔jrst .+3↔exch 3,4↔setcmm PARITY
;Reciprocal of the pivot.
	movsi R,(1.0)↔fdvr R,(3)3
;Zero column-3 element of row 4.
	lac M,(4)3↔fmpr M,R	↔SETZM (4)3
		lacn M↔fmpr (3)4↔fadrm (4)4
		lacn M↔fmpr (3)5↔fadrm (4)5
;Normalize Row-3.
	FMPRM R,(3)3
	fmprm R,(3)4
	fmprm R,(3)5
;Find column-4 pivot for 1 by 1 matriX  (trivail).
;Reciprocal of the pivot.
T4:	movsi R,(1.0)↔fdvr R,(4)4
;Normalize Row-4.
	FMPRM R,(4)4
	fmprm R,(4)5
;Back Substitution.
	
T5:	lacn (4)5↔fmpr (3)4↔fadrm (3)5
	lacn (4)5↔fmpr (2)4↔fadrm (2)5
	lacn (4)5↔fmpr (1)4↔fadrm (1)5
	lacn (3)5↔fmpr (2)3↔fadrm (2)5
	lacn (3)5↔fmpr (1)3↔fadrm (1)5
	lacn (2)5↔fmpr (1)2↔fadrm (1)5
;Move results to Vector B.
	lac  5,ARG2	;B vector pointer.
	skipe PARITY↔jrst T7
T6:	lac(1)5↔dac(5)3
	lac(2)5↔dac(5)2
	lac(3)5↔dac(5)1
	lac(4)5↔dac(5)0
	lac 12,AC12↔pop3j
	
T7:	lacn(1)5↔dac(5)3
	lacn(2)5↔dac(5)2
	lacn(3)5↔dac(5)1
	lacn(4)5↔dac(5)0
	lac 12,AC12↔pop3j
END